package com.gxc.integer;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * 对一个数据a进行分类，分类方法为：
 *
 * 此数据a（四个字节大小）的四个字节相加对一个给定的值b取模，如果得到的结果小于一个给定的值c，则数据a为有效类型，其类型为取模的值；如果得到的结果大于或者等于c，则数据a为无效类型。
 *
 * 比如一个数据a=0x01010101，b=3，按照分类方法计算（0x01+0x01+0x01+0x01）%3=1，
 *
 * 所以如果c=2，则此a为有效类型，其类型为1，如果c=1，则此a为无效类型；
 *
 * 又比如一个数据a=0x01010103，b=3，按照分类方法计算（0x01+0x01+0x01+0x03）%3=0，
 *
 * 所以如果c=2，则此a为有效类型，其类型为0，如果c=0，则此a为无效类型。
 *
 * 输入12个数据，第一个数据为c，第二个数据为b，剩余10个数据为需要分类的数据，
 *
 * 请找到有效类型中包含数据最多的类型，并输出该类型含有多少个数据。
 *
 * 输入描述
 * 输入12个数据，用空格分隔，第一个数据为c，第二个数据为b，剩余10个数据为需要分类的数据。
 *
 * 输出描述
 * 输出最多数据的有效类型有
 */
public class Classification {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long c = scanner.nextLong();
        long b = scanner.nextLong();
        long[] array = new long[10];
        for (int i = 0; i < array.length; i++) {
            array[i] = scanner.nextLong();
        }

        Map<Integer, java.lang.Integer> map =new HashMap<>();
        long mod = (1<<8) - 1;
        for (int i = 0; i < array.length; i++) {
            long l = array[i];
            long sum = 0;
            while (l !=0) {
                sum += (l & mod);
                l = l >> 8;
            }
            if (sum % b < c) {
                map.put((int) (sum % b), map.getOrDefault((int) (sum % b), 0) + 1 );
            }
        }
        int max = -1;
        for (Map.Entry<Integer, Integer> integerIntegerEntry : map.entrySet()) {
            max = Math.max(max, integerIntegerEntry.getValue());
        }
        System.out.println(max);
    }
}
